package com.zha.boss.mvc.controller;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zha.boss.constants.SysConstants;
import com.zha.boss.dao.entity.PayProduct;
import com.zha.boss.dao.result.DicItem;
import com.zha.boss.enums.resp.RespCode;
import com.zha.boss.mvc.convert.ProductConvert;
import com.zha.boss.mvc.models.resp.AjaxResult;
import com.zha.boss.mvc.models.resp.PageInfo;
import com.zha.boss.mvc.models.vo.PayProductMatchVo;
import com.zha.boss.mvc.models.vo.PayProductVo;
import com.zha.boss.mvc.service.ProductService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: zha
 * @CreateTime: 2024年09月15日 8:39
 */
@RestController
public class ProductController {
    @Resource
    private ProductService productService;
    @Resource
    private ProductConvert productConvert;
    /**
     * 添加支付产品
     * @return
     */
    @PostMapping("/product/add")
    public AjaxResult addProduct(@RequestBody JSONObject product){
        String productCode = product.getStr("productCode");
        String productName = product.getStr("productName");

        if(StrUtil.isNotBlank(productCode) && productCode.trim().length() > 1
                && StrUtil.isNotBlank(productName) && productName.trim().length() > 1 ){

            productService.addProduct(productCode.trim(),productName.trim());
            return AjaxResult.ok();
        }
        return AjaxResult.warn(RespCode.REQUEST_PARAM_ERR);
    }

    /**
     * 分页查询支付产品列表
     * @param pageNo   页号
     * @return
     */
    @GetMapping("/product/pageList")
    public AjaxResult pageList(Integer pageNo){
        pageNo = (pageNo == null || pageNo < 1) ? 1 : pageNo;
        IPage<PayProduct> pageResult = productService.productPageList(pageNo, SysConstants.PAGE_SIZE);
        PageInfo pageInfo = new PageInfo(pageResult.getCurrent(),pageResult.getPages());
        List<PayProduct> productList = pageResult.getRecords();
        List<PayProductVo> listPayProductVo = productConvert.toListPayProductVo(pageResult.getRecords());
        Map<String,Object> data = new HashMap<>();
        data.put("page", pageInfo);
        data.put("list", listPayProductVo);
        return AjaxResult.ok(data);
    }
    @GetMapping("/product/dic")
    public AjaxResult queryProductDic(){
        List<DicItem> dicItemList = productService.queryProductDicInfo();
        return AjaxResult.ok(dicItemList);
    }
    /**
     * 删除某个支付产品
     * @param productCode 产品代码
     * @return
     */
    @PostMapping("/product/remove")
    public AjaxResult removeProduct( String productCode){
        if(StrUtil.isNotBlank(productCode) && productCode.trim().length() > 2){
            productService.removeProduct(productCode);
            return AjaxResult.ok();
        }
        return AjaxResult.warn(RespCode.REQUEST_PARAM_ERR);
    }
    /**
     *  修改产品状态
     */
    @PostMapping("/product/status")
    public AjaxResult updateStatus(String productCode){
        if (StrUtil.isNotBlank(productCode) && productCode.trim().length() > 2){
            productService.updateProductStatus(productCode);
            return AjaxResult.ok();
        }
        return AjaxResult.warn(RespCode.REQUEST_PARAM_ERR);
    }
    /**
     * 模糊查询支付产品
     */
    @GetMapping("/product/match/name")
    public AjaxResult matchProductByName(String productName){
        if (StrUtil.isNotBlank(productName) && productName.trim().length() > 1){
             List<PayProduct> productList = productService.matchProductByName(productName);
            List<PayProductMatchVo> listPayProductMatchVo = productConvert.toListPayProductMatchVo(productList);
            return AjaxResult.ok(listPayProductMatchVo);
        }
        return AjaxResult.warn(RespCode.REQUEST_PARAM_ERR);
    }
}
